Este es un R Markdown a modo de ejercicio para aprender su uso. Para su contenido me he basado en los ejercicos realizados sobre ggmap.

Librerías requeridas

library(tidyverse)
library(ggmap)
library(knitr)
library(kableExtra)
require(raster)
require(plotly)

Ejercicio 1

Dibujar un punto en un mapa con nombre

casa_zizur <- data.frame(lon = -1.693952,lat = 42.79191)
mapa <- get_map(casa_zizur, zoom = 16)
mapa2 <- get_map(casa_zizur, zoom = 16, source = "stamen", maptype = "watercolor")
ggmap(mapa) + 
  geom_point(data = casa_zizur, aes(x = lon, y = lat), size = 3, col = "red3") +
  geom_text(data = casa_zizur, aes(x = lon, y = lat), label = "Casa", size = 3)

ggmap(mapa2) + 
  geom_point(data = casa_zizur, aes(x = lon, y = lat), size = 3, col = "red3") +
  geom_text(data = casa_zizur, aes(x = lon, y = lat), label = "Casa", size = 3)

Ejercicio 2

Dibujar en un mapa las terrazas del barrio donde está Kschool. Utilizar la base de datos de las terrazas del csv.

terrazas <- read.csv("data/terrazas.csv")
kschool <- data.frame(lon = -3.705715,lat = 40.43232)
mapa <- get_map(kschool, zoom = 16)
ggmap(mapa) + 
  geom_point(data = terrazas, aes(x = lon, y = lat), 
             size = 1.5, alpha = 0.75, col = "orange3")

Ejercicio 3

Mismo ejercicio que antes pero con gasolineras. Utilizar la base de datos de carburantes del csv.

gasolineras <- read.csv("data/carburantes.csv", sep = ";", encoding = "UTF-8", dec = ",")

Voy a ver las provincias con menor precio de media en Gasoleo.A

p <- gasolineras %>% 
  filter(Precio.Gasoleo.A != "", !is.na(Precio.Gasoleo.A)) %>% 
  group_by(Provincia) %>% 
  summarise(avg_precio = mean(Precio.Gasoleo.A)) %>% 
  mutate(rango = rank(avg_precio)) %>% 
  arrange(rango)

kable(p, caption = "Precio medio en Gasóleo A") %>% 
  kable_styling() %>% 
  scroll_box(width = "100%", height = "200px")
Precio medio en Gasóleo A
Provincia avg_precio rango
MELILLA 0.8590000 1
SANTA CRUZ DE TENERIFE 0.8763886 2
PALMAS (LAS) 0.9175762 3
CEUTA 0.9267778 4
NAVARRA 1.1186222 5
HUESCA 1.1230714 6
ZARAGOZA 1.1324753 7
TERUEL 1.1410526 8
LLEIDA 1.1437582 9
VALENCIA / VALÈNCIA 1.1534288 10
MADRID 1.1550197 11
SEGOVIA 1.1556825 12
ÁLAVA 1.1559273 13
BARCELONA 1.1560732 14
CANTABRIA 1.1565581 15
RIOJA (LA) 1.1567465 16
ÁVILA 1.1572833 17
MURCIA 1.1593473 18
CASTELLÓN / CASTELLÓ 1.1609515 19
GIRONA 1.1621441 20
SORIA 1.1626486 21
BURGOS 1.1627143 22
VIZCAYA 1.1652476 23
ZAMORA 1.1672267 24
GRANADA 1.1672563 25
TOLEDO 1.1675514 26
LEÓN 1.1712653 27
GUIPÚZCOA 1.1714569 28
SALAMANCA 1.1716087 29
BADAJOZ 1.1726560 30
TARRAGONA 1.1728738 31
CUENCA 1.1745408 32
ALICANTE 1.1757895 33
ALMERÍA 1.1758047 34
VALLADOLID 1.1760172 35
PALENCIA 1.1800000 36
CÓRDOBA 1.1814512 37
HUELVA 1.1817431 38
SEVILLA 1.1831622 39
ALBACETE 1.1845735 40
CÁDIZ 1.1864523 41
MÁLAGA 1.1874177 42
GUADALAJARA 1.1890137 43
JAÉN 1.1891098 44
CIUDAD REAL 1.1912716 45
CÁCERES 1.1913739 46
ASTURIAS 1.1951535 47
CORUÑA (A) 1.2001364 48
OURENSE 1.2135393 49
LUGO 1.2138774 50
PONTEVEDRA 1.2146265 51
BALEARS (ILLES) 1.2379006 52

Voy a dibujar las gasolineras de Madrid teniendo en cuenta solo el Precio.Gasoleo.A

gasolineras_madrid <- gasolineras %>%
  filter(Provincia == "MADRID", Precio.Gasoleo.A != "", !is.na(Precio.Gasoleo.A)) %>% 
  select(lon = Longitud..WGS84., lat = Latitud..WGS84., Precio.Gasoleo.A)

madrid <- data.frame(lon = -3.70379,lat = 40.41678)
mapa <- get_map(madrid)
ggmap(mapa) + 
  geom_point(data = gasolineras_madrid, aes(x = lon, y = lat, color = Precio.Gasoleo.A),
             alpha = 0.8, size = 1.5)

Ahora voy a dibujar las que tengan un precio menor a 1.10

gasolineras_madrid <- gasolineras %>%
  filter(Provincia == "MADRID", Precio.Gasoleo.A != "", !is.na(Precio.Gasoleo.A)) %>% 
  filter(Precio.Gasoleo.A < 1.10) %>% 
  select(lon = Longitud..WGS84., lat = Latitud..WGS84., Precio.Gasoleo.A)
ggmap(mapa) + 
  geom_point(data = gasolineras_madrid, aes(x = lon, y = lat),
             alpha = 0.8, size = 2)

Ejercicio 4

Dibujar las gasolineras en Madrid: Gasoleos y Gasolinas Que cada tipo de carburante tenga su gráfico Utilizar el color para ver la diferencia de precios

Primero filtro los datos y selecciono las variables que quiero

gasolineras_madrid <- gasolineras %>% 
  select(lon = Longitud..WGS84., lat = Latitud..WGS84.,
         Provincia,
         Precio.Gasolina.95.Protección,
         Precio.Gasolina..98,
         Precio.Gasoleo.A,
         Precio.Nuevo.Gasoleo.A) %>% 
  filter(Provincia == "MADRID", !is.na(Precio.Gasoleo.A),
         !is.na(Precio.Nuevo.Gasoleo.A), !is.na(Precio.Gasolina..98),
         !is.na(Precio.Gasolina.95.Protección))

Ahora transformo mi DF poniendo los tipos de carburantes en formato fila

gasolineras_madrid <- gather(gasolineras_madrid, carburante, precio, -lon, -lat, -Provincia)
ggmap(mapa) +
  geom_point(data = gasolineras_madrid, aes(x = lon, y = lat, color = precio),
             size = 1.5, alpha = 0.8) +
  ggtitle("Precios Carburantes en Madrid") +
  facet_wrap( ~ carburante) + 
  theme_bw()

Ejercicio 5

Utiliza el conjunto de datos Crime que viene con el paquete ggmap Haz un gráfico en el mapa de Houston solo teniendo en cuenta los asaltos graves Un gráfico por tipo de asalto y un gráfico por día de la semana

houston_crime <- crime %>% 
  filter(!offense %in% c("aggravated assault", "burglary", "theft"))

houston <- data.frame(lon = -95.3698, lat = 29.76043)
mapa <- get_map(houston, zoom = 14)
ggmap(mapa) + 
  geom_point(data = houston_crime, aes(x = lon, y =lat), 
             size = 1, alpha = 0.6, color = "red3") +
  facet_wrap( ~ offense)

ggmap(mapa) + 
  geom_point(data = houston_crime, aes(x = lon, y = lat), 
             size = 1, alpha = 0.6, color = "red3") +
  facet_wrap( ~ day)

Ejercicio 6

Utiliza el conjunto de datos Crime que viene con el paquete ggmap Haz un gráfico en el mapa de Houston solo teniendo en cuenta los asaltos graves Un gráfico por tipo de asalto y un gráfico en formato de densidades

ggmap(mapa) + 
  stat_density2d(data = houston_crime, aes(x = lon, y = lat, alpha = ..level..),
                 fill = "red4", size = 2, geom = "polygon") + 
  facet_wrap( ~ offense)

Ejercicio 7

Utilizando la base de datos del paro del csv: Hacer un gráfico de la tasa del paro según sexo y provincia en un mapa Se debe diferenciar la tasa del paro según el color (solo la península) Coger el primer trimestre del 2011

paro <- read.csv("data/paro.csv", encoding = "UTF-8")
paro_I_2011 <- paro %>%
  filter(Año == 2011)

# Cargo el mapa de España y filtro para quedarme la península
shape <- getData("GADM", country= "Spain", level = 2)
peninsula <- subset(shape, !NAME_1 == "Islas Canarias")

# Transformo la variable peninsula en data frame
peninsula.df <- fortify(peninsula, region="CCA_2")

# Ahora hago un merge para unificar las dos base de datos
# Tengo que transformar la columna id porque está guardada como texto
peninsula.df <- peninsula.df %>% 
  mutate(id = as.numeric(id))

peninsula_paro = inner_join(peninsula.df, paro_I_2011, by = c("id" = "Prov.id"))
ggplot(peninsula_paro) + 
  aes(x = long, y = lat, group = group, fill = Tasa.paro) + 
  geom_polygon(colour = "grey80", size = 0.1) + 
  facet_grid(Sexo ~ Trimestre) + 
  ggtitle("Tasa del paro 2011 por Trimestre") +
  scale_fill_gradient(low = "aliceblue", high = "steelblue4") +
  coord_quickmap()